package main

import (
	"fmt"
	"go_web/config"
	"go_web/dao/mysql"
	"go_web/dao/redis"
	"go_web/logger"
	"go_web/pkg/gen_id"
	"go_web/routers"
)

//此处是主入口
func main() {

	//加载配置文件
	//此处若是通过IDE直接运行的话，文件路径需要写绝对路径，若是通过命令行的方式启动的话，写相对路径即可
	if err := config.LoadFromFile("./conf/web.ini"); err != nil {
		fmt.Printf("load conf file err:%v\n", err) //当加载配置文件失败的时候，直接打印错误
		return                                     //退出执行,啥也不返回
	}
	//当上述都没错的时候，才会继续往下执行

	//加载logger日志
	if err := logger.InitLogger(config.Conf.LogConfig); err != nil {
		fmt.Printf("logger conf file err:%v\n", err)
		return
	}

	//连接数据库
	//连接mysql
	if err := mysql.Init(config.Conf.MysqlConfig); err != nil {
		fmt.Printf("connect mysql faild err:%v\n", err)
		return
	}
	defer mysql.Close() //mysql连接完毕后，需要关闭

	//连接redis
	if err := redis.Init(config.Conf.RedisConfig); err != nil {
		fmt.Printf("connect redis faild err:%v\n", err)
		return
	}
	defer redis.Close() //redis连接完毕后，需要关闭

	//初始化分布式ID生成器
	if err := gen_id.Init(1); err != nil {
		fmt.Printf("gen_id faild err:%v\n", err)
		return
	}

	//返回一个路由实例(注册路由)
	r := routers.SetupRouter()

	//启动路由
	err := r.Run(fmt.Sprintf(":%d", config.Conf.ServerPort.Port)) //%d之前有个:
	if err != nil {
		fmt.Printf("run server failed, err:%v\n", err)
		return
	}
}
